﻿namespace Service.Framework.AppStartup
{

    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
    public class ImportStartupModuleAttribute : Attribute
    {
        private readonly List<Type> _startupTypes = new List<Type>();

        private readonly List<IStartupModule> _startups = new List<IStartupModule>();

        //
        // 摘要:
        //     导入启动模块
        //
        // 参数:
        //   startupTypes:
        public ImportStartupModuleAttribute(params Type[] startupTypes)
        {
            Init(startupTypes);
        }

        //
        // 摘要:
        //     初始化
        protected void Init(params Type[] startupTypes)
        {
            _startupTypes.AddRange(startupTypes);
            foreach (Type startupType in _startupTypes)
            {
                if (Activator.CreateInstance(startupType) is IStartupModule item)
                {
                    _startups.Add(item);
                }
            }
        }

        //
        // 摘要:
        //     获取启动器集合
        public List<Type> GetStartupTypes()
        {
            return _startupTypes;
        }

        //
        // 摘要:
        //     获取启动器实例集合
        public List<IStartupModule> GetStartups()
        {
            return _startups;
        }
    }
}
